%% \documentclass[a4paper,12pt,answers]{exam}
\documentclass[a4paper,12pt]{exam}
\usepackage[bahasa]{babel}
\usepackage{graphicx}
\usepackage{fancyvrb}
\usepackage{epic}
\usepackage{ecltree}
%\usepackage{pstricks,pst-node}
%\usepackage{vaucanson-g}
%\usepackage[a4paper]{geometry}
\usepackage{wordlike}
\usepackage{xifthen}
\usepackage{algorithmic}

%%%%%%% Packages initializations
%% Paper sizes
%\geometry{left=3cm}
%\geometry{top=3cm}
%\geometry{right=3cm}
%\geometry{bottom=3cm}

%\fvset{fontsize=\scriptsize,numbers=left,frame=leftline}
\fvset{fontsize=\scriptsize,frame=leftline}

%% Season-based settings and Conditionals, xifthen
\newboolean{SemesterReguler}
\newboolean{Quiz}
\newboolean{AdaPejabatJurusan}
\newboolean{JawabanLangsung}
\newboolean{NamaAlias}

\setboolean{SemesterReguler}{false}
\setboolean{Quiz}{false}
\setboolean{AdaPejabatJurusan}{false}
% Jawaban ditulis di lembar soal? true kalo iya. Jangan lupa menyalakan opsi answer.
\setboolean{JawabanLangsung}{false}
\setboolean{NamaAlias}{false}

%% Locale
\newcommand{\universitas}{Universitas Trisakti}
\newcommand{\fakultas}{Fakultas Teknologi Industri}
\newcommand{\programstudi}{Teknik Informatika, Sistem Informasi}
\newcommand{\namakuliah}{Organisasi dan Arsitektur Komputer}
\newcommand{\kodekuliah}{IKH351}
\newcommand{\tipeujian}{Tugas Mandiri 2}
\newcommand{\semester}{Semester Gasal Pendek 2014/2015}
\newcommand{\tanggalujian}{Kamis, 16 Januari 2015}
\newcommand{\waktuujian}{Sabtu, 18 Januari 2015 pukul 23.59 WIB}
\newcommand{\sifatujian}{Buka buku}
\newcommand{\dosenkoordinator}{(Anung Ariwibowo, MKom)}
\ifthenelse{\boolean{AdaPejabatJurusan}}{
	\newcommand{\kajursekjur}{(Ir. Syaifudin, PhD)}
}
{
	\newcommand{\kajursekjur}{(\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots)}
}
\newcommand{\ralat}[1]{\textbf{(RALAT: #1)}}

\renewcommand{\solutiontitle}{\noindent\textbf{Jawab:}\par\noindent}
\renewcommand{\partlabel}{\thepartno.}
\vqword{Nomor}
\hqword{Nomor}
\vpword{Poin}
\hpword{Poin}
\vsword{Nilai}
\hsword{Nilai}
\pointsinmargin
\boxedpoints
\addpoints

\pagestyle{headandfoot}
\runningheadrule
\footrule
%\header{\namakuliah \\ \kodekuliah}{}{60.Kul.1TIF/R.0 \\ \tanggalujian}
\firstpageheader{}{}{60.Kul.1TIF/R.0}
\runningheader{\namakuliah \\ \kodekuliah}{}{60.Kul.1TIF/R.0 \\ \tanggalujian}
%%\lhead[]{\namakuliah \\ \kodekuliah}
%%\rhead[]{60.Kul.1TIF/R.0 \\ \tanggalujian}
\cfoot{\iflastpage{Halaman \thepage\ dari \numpages\\Selamat Belajar atas dasar Inisiatif Pribadi.}{Halaman \thepage\ dari \numpages}}
%%\cfoot{\iflastpage{Halaman \thepage\ dari \numpages\\Orang yang dicontek tidak lebih tahu daripada Orang yang mencontek.}{Halaman \thepage\ dari \numpages}}

%% package ecltree
\setlength{\GapWidth}{10mm}
%%%%%%% Packages initializations

\begin{document}
\ifthenelse{\boolean{Quiz}}{
	% SEMESTER PENDEK or QUIZ
	\begin{center}
	% \begin{coverpages}
		{\bf
			\parbox{5.5in}{\centering
				{\Large
					\fakultas\ -- \universitas
					
					\programstudi
				}
				\vspace{0.5cm}
				
				{\large
					\semester
					
					\namakuliah\ -- \kodekuliah
				}
				\vspace{0.5cm}
				
				{\small
					\tipeujian , \tanggalujian\
					
					\waktuujian\ -- \sifatujian
				}
				\vspace{1.5cm}
			}
		}
		\vspace{0.5cm}
		\hbox to \textwidth{Nama : \enspace\hrulefill}
		\vspace{0.5cm}
		\hbox to \textwidth{NIM : \enspace\hrulefill}
		\ifthenelse{\boolean{NamaAlias}}{
			\vspace{0.5cm}
			\hbox to \textwidth{E-mail: \enspace\hrulefill}
			\vspace{0.5cm}
			\hbox to \textwidth{Nama alias \footnote{Nama alias digunakan untuk mengumumkan nilai.}: \enspace\hrulefill}
		}
		
		\vspace{1.0cm}
		\gradetable[h][questions]
	% \end{coverpages}
	\end{center}
}
{
	% EXAM
	\begin{center}
	  {\bf
	    {\centering {\Large
	      \fakultas\ -- \universitas } \\ \large{ \programstudi } \\ \normalsize{\tipeujian \\ \semester }
	    }
	    \vspace{0.5cm}
	    \hrule
	    {\small
	      \vspace{1cm}
	      \begin{tabular}{p{0.5\textwidth}p{0.3\textwidth}}
	        \namakuliah\ -- \kodekuliah & \multicolumn{1}{r}{\sifatujian} \\
	        \tanggalujian\ & \multicolumn{1}{r}{\waktuujian} \\
	        & \\
	        \multicolumn{1}{c}{\emph{Koordinator Mata Kuliah}} &
	        \multicolumn{1}{c}{\emph{Diperiksa dan Disetujui oleh}} \\
	        & \multicolumn{1}{c}{Ketua Progam Studi / Sekjur} \\
	        & \\
	        & \\
	        & \\
	        \multicolumn{1}{c}{\dosenkoordinator} & \multicolumn{1}{c}{\kajursekjur} \\
	      \end{tabular}
	    }
	  }
	  \vspace{0.5cm}
	  \hrule
	  \vspace{0.1cm}
	  Ujian ini terdiri atas \numpages~halaman, \numquestions~soal, dan \numpoints~poin.
	  
		\vspace{0.5cm}
		\gradetable[h][questions]
	\end{center}
		\vspace{0.5cm}
		\hbox to \textwidth{Nama : \enspace\hrulefill}
		\vspace{0.5cm}
		\hbox to \textwidth{NIM : \enspace\hrulefill}
}

\begin{questions}
%	\fullwidth{{\par\centering \textbf{Soal Wajib: Kerjakan 4 soal di bawah ini.}\par}}
  \question Komputer Simpletron memiliki set instruksi seperti yang ditunjukkan dalam tabel. Gunakan set instruksi tersebut untuk menyusun program dalam bahasa Simpletron, yang menghitung operasi perpangkatan bilangan bulat.
  
  Operasi perpangkatan dua bilangan bulat $m$ dan $n$ didefinisikan secara matematis sebagai:
  \[ m^{n} = \Pi_{i=1}^{n} m \] dengan $\Pi$ adalah operasi perkalian.
  
  Sebagai contoh, $2^{4} = \Pi_{i=1}^{4} 2 = 2 \times 2 \times 2 \times 2 = 16$.
  
  \question[20] Tuliskan algoritme dalam bentuk \emph{pseudocode}, sebuah program yang menerima input dua buah bilangan bulat positif $a$ dan $b$. Algoritme ini melakukan operasi perpangkatan $a^{b}$ seperti didefinisikan secara matematis di atas.
  \begin{solution}
  \vspace{3.0cm}
  \end{solution}
  
  \question[30] Tuliskan program menggunakan bahasa instruksi Simpletron yang menerima input dua bilangan bulat positif, kemudian melakukan perhitungan pangkat seperti algoritme yang saudara buat sebelumnya.
    
  Gambarkan isi memori komputer Simpletron yang memuat instruksi-instruksi dari program saudara.
  \begin{solution}
  \vspace{3.0cm}
  \end{solution}
  
  
\begin{center}
\begin{tabular}{|c|l|p{0.6\textwidth}|}
\hline
\multicolumn{1}{|c|}{\textbf{Operasi}} &
\multicolumn{1}{c|}{\textbf{Simbolik}} &
\multicolumn{1}{c|}{\textbf{Keterangan}} \\
\hline
\hline
\multicolumn{3}{|c|}{\textbf{Operasi Input/Output}} \\
\hline
+10xx & READ & Membaca satu word data dari keyboard dan menyimpannya ke alamat memori 'xx'. \\
+11xx & WRITE & Menulis satu word data dari lokasi memori 'xx' ke layar monitor. \\
\hline
\multicolumn{3}{|c|}{\textbf{Operasi Load dan Store}} \\
\hline
+20xx & LOAD & Mengambil data dari lokasi memori 'xx' dan meletakkannya di Accumulator. \\
+21xx & STORE & Menyimpan data dari Accumulator ke lokasi memori 'xx'. \\
\hline
\multicolumn{3}{|c|}{\textbf{Operasi Aritmatika}} \\
\hline
+30xx & ADD & Menjumlahkan satu word data di lokasi memori 'xx' dengan satu word data di Accumulator. Hasil penjumlahan disimpan di dalam Accumulator. \\
+31xx & SUB & Mengurangi satu word data di Accumulator dengan bilangan di lokasi memori 'xx'. Hasil pengurangan disimpan di Accumulator. \\
+32xx & DIV & Membagi bilangan yang ada di Accumulator dengan bilangan di lokasi memori 'xx'. Hasil pembagian disimpan di Accumulator. \\
+33xx & MUL & Mengalikan bilangan di Accumulator dengan bilangan di lokasi memori 'xx'. Hasil perkalian disimpan di Accumulator. \\
\hline
\multicolumn{3}{|c|}{\textbf{Operasi Kendali}} \\
\hline
+40xx & BRANCH & Melompat ke instruksi berikutnya yang berada di alamat memori 'xx'. \\
+41xx & BRANCHNEG & Melompat ke instruksi di alamat memori 'xx' jika data di Accumulator nilainya negatif. \\
+42xx & BRANCHZERO & Melompat ke instruksi di alamat memori 'xx' jika data di Accumulator nilainya sama dengan $0$. \\
+4300 & HALT & Menghentikan eksekusi program. \\
\hline
\end{tabular}
\end{center}

\end{questions}
\end{document}
